#ifndef RESPONSE_ROTATE_IMAGE_H_INCLUDED
#define RESPONSE_ROTATE_IMAGE_H_INCLUDED

/**
* @file response_rotate_image.h
*
*	 Nel file response_rotate_image.h viene definita la classe che gestisce la 
*	 comunicazione tra il Service Provider che offre il servizio di Rotate_Image ed il 
*	 Client
*	
* @author Favale Angelo
* @author Fagioli Alessio
*
* @version 1.0
*/

#include "libreria.h"
/**
* @class Response_Rotate_Image
*
*	 La classe Response_Rotate_Image gestisce la comunicazione tra il Service Provider
*	 ed il client che vuole richiedere il servizio di Rotate_Image
*/
class Response_Rotate_Image
{
	private:
		char name[BUFFER_SIZE];	/**< Nome del Servizio (Rotate_Image)	*/
		host entita;		/**< Mantiene informazioni sull'entità con cui 
					 *    deve scambiare informazioni		*/
	public:
		/**
		* Il costrutture carica le informazioni riguardanti l'entità con cui deve 
		* comunicare
		*/
		Response_Rotate_Image(host);

		/**
		* @param file Nome dell'immagine da ruotare
		* @param direzione Direzione verso il quale si vuole ruotare l'immagine
		*
		* @return true se l'invio della richiesta al Service Provider è andata a buon
		*	  fine, false altrimenti
		*
		* Questo metodo permette al client di chiedere al Service Provider di ruotare
		* l'immagine file nel verso direzione
		*/
		bool code_request( char * file, char * direzione);

		/**
		* @param buf Messaggio da decodificare
		* @param file Nome dell'immagine che il client vuole ruotare, ritornato per 
		*	      riferimento
		* @param lunghezza_file Dimensione dell'immagine che il client vuole 
		*			ruotare, ritornato per riferimento
		* @param dir Direzione verso cui il client vuole ruotare l'immagine,
		*	     ritornato per riferimento
		*
		* @return true se la decodifica del messaggio è andata a buon fine, false 
		*	  altrimenti
		*
		* Questo metodo permette al Service Provider di decodificare il messaggio 
		* inviato dal client.
		* In particolare vengono estratte le informazioni sul nome dell'immagine, la 
		* sua dimensione, e la direzione verso cui deve essere ruotata l'immagine
		*/
		bool decode_request( char * buf, char * file, char * lunghezza_file, char * dir);

		/**
		* @param nome_file Nome dell'immagine che il client vuole ruotare
		* @param len_file Dimensione dell'immagine che il client vuole ruotare
		*
		* @return true se la ricezione dell'immagine è andata a buon fine, false 
		*	  altrimenti
		*
		* Questo metodo permette al Service Provider di ricevere l'immagine che il
		* client vuole ruotare
		*/
		bool receive_image( char * nome_file, int len_file );

		/**
		* @param file Nome dell'immagine che il Service Provider invia al client
		*
		* @return true se l'invio dell'immagine ruotata è andata a buon fine, false 
		*	  altrimenti
		*
		* Questo metodo permette al Service Provider di inviare l'immagine ruotata
		* al client
		*/
		bool send_image(char * file);

		/**
		* @param verify Indica se l'operazione di rotazione dell'immagine è andata a
		*		buon fine
		* @param nome_file Nome dell'immagine che il Service Provider ha ruotato
		*
		* @return true se l'invio dell'immagine ruotata è avvenuto con successo,
		*	  false altrimenti
		*
		* Questo metodo consente al Service Provider di inviare l'immagine ruotata al
		* client che l'ha richiesta
		*/
		bool code_response( bool verify, char * nome_file);

		/**
		* @param lunghezza_file Dimensione dell'immagine ruotata
		*
		* @return true se l'immagine ruotata è stata ricevuta con successo, false
		*	  altrimenti
		*
		* Questo metodo permette al client di ricevere l'immagine ruotata dal Service
		* Provider
		*/
		bool decode_response(char * lunghezza_file);
} ;
#endif
